package com.yqg.manage.mapper;

import com.github.yulichang.base.MPJBaseMapper;
import com.yqg.manage.controller.dto.*;
import com.yqg.manage.entity.Case;
import com.yqg.manage.entity.Params;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.io.Serializable;
import java.util.List;

/**
 * <p>
 *  Mapper 接口
 * </p>
 *
 * @author suzhuang
 * @since 2023-07-05
 */
public interface CaseMapper extends MPJBaseMapper<Case> {

    /**
     * 重写通过ID查询（将流程数组也查询到对象中）
     * @param id ID
     * @return case对象
     */
    @Override
    Case selectById(@Param("id") Serializable id);

    HandingDTO[] handing(@Param("unitId") Long unitId, @Param("userId") Long userId);

    InformDTO[] inform(@Param("unitId") Long unitId, @Param("userId") Long userId);

    CaseCategoryRankingDTO[] caseTypeRanking(@Param("unitId") Long unitId, @Param("userId") Long userId);

    CaseResultDTO[] countResult(@Param("unitId") Long unitId, @Param("userId") Long userId);

    @Select("select * from cases where case_no=#{caseNum}")
    int ifExist(@Param("caseNum") String caseNum);

    List<MontCountDTO> allMontCount(@Param("unitId") Long unitId, @Param("userId") Long userId);

    /**
     * 不根据案件的指向查询案件
     */
    List<Case> findCaseManageUnit(@Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize,
                                  @Param("search") String search, @Param("dossierId") Long dossierId,
                                  @Param("process") String process, @Param("userId") Long userId,
                                  @Param("unitId") Long unitId);
    Integer findCaseManageUnitCount(@Param("search") String search, @Param("dossierId") Long dossierId,
                                    @Param("process") String process, @Param("userId") Long userId,
                                    @Param("unitId") Long unitId);

    /**
     * 根据案件的指向查询案件
     */
    List<Case> findCasePointToUser(@Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize,
                                   @Param("search") String search, @Param("dossierId") Long dossierId,
                                   @Param("process") String process, @Param("userId") Long userId,
                                   @Param("unitId") Long unitId);
    Integer findCasePointToUserCount(@Param("search") String search, @Param("dossierId") Long dossierId,
                                     @Param("process") String process, @Param("userId") Long userId,
                                     @Param("unitId") Long unitId);


    /**
     * 根据id获取案件
     * @param caseId ID
     * @return case对象
     */
    Case getCaseById(@Param("caseId") Long caseId);

    /**
     * 查询案件是否有案件结案报告
     * @param id 案件ID
     */
    List<Params> getCaseClosed(@Param("id") Long id);

    /**
     * 第二次提交时，设置某些字段为空，以免影响其他的判断
     */
    void setCommitInfoToNull(@Param("id") Long id);

}
